package com.example.utils;

import lombok.extern.slf4j.Slf4j;

/**
 * MinIO工具类
 * 提供MinIO相关的工具方法
 */
@Slf4j
public class MinioUtils {

    /**
     * 从MinIO URL中提取对象名
     * @param minioUrl MinIO完整URL
     * @param bucketName 桶名
     * @return 对象名
     */
    public static String extractObjectNameFromUrl(String minioUrl, String bucketName) {
        if (minioUrl == null || minioUrl.trim().isEmpty()) {
            return "";
        }
        
        try {
            // 如果不是HTTP URL，直接返回
            if (!minioUrl.startsWith("http")) {
                return minioUrl;
            }
            
            // 解析URL
            java.net.URL url = new java.net.URL(minioUrl);
            String path = url.getPath();
            
            // MinIO URL格式: http://ip:port/bucket-name/object-name
            // 移除开头的 /bucket-name/
            String prefix = "/" + bucketName + "/";
            if (path.startsWith(prefix)) {
                return path.substring(prefix.length());
            }
            
            // 如果没有找到桶名前缀，尝试移除第一个路径段
            String[] pathParts = path.split("/");
            if (pathParts.length > 2) {
                StringBuilder objectName = new StringBuilder();
                for (int i = 2; i < pathParts.length; i++) {
                    if (i > 2) {
                        objectName.append("/");
                    }
                    objectName.append(pathParts[i]);
                }
                return objectName.toString();
            }
            
            return path.startsWith("/") ? path.substring(1) : path;
            
        } catch (Exception e) {
            log.warn("解析MinIO URL失败: {}", minioUrl, e);
            return minioUrl;
        }
    }

    /**
     * 验证文件扩展名是否为图片
     * @param filename 文件名
     * @return 是否为图片
     */
    public static boolean isImageFile(String filename) {
        if (filename == null || filename.trim().isEmpty()) {
            return false;
        }
        
        String extension = getFileExtension(filename).toLowerCase();
        return extension.matches("\\.(jpg|jpeg|png|gif|bmp|webp)$");
    }

    /**
     * 获取文件扩展名
     * @param filename 文件名
     * @return 扩展名（包含点号）
     */
    public static String getFileExtension(String filename) {
        if (filename == null || filename.lastIndexOf('.') == -1) {
            return "";
        }
        return filename.substring(filename.lastIndexOf('.'));
    }

    /**
     * 生成安全的文件名（移除特殊字符）
     * @param originalFilename 原始文件名
     * @return 安全的文件名
     */
    public static String generateSafeFilename(String originalFilename) {
        if (originalFilename == null || originalFilename.trim().isEmpty()) {
            return "unnamed";
        }
        
        // 移除路径分隔符和其他危险字符
        String safeName = originalFilename.replaceAll("[/\\\\:*?\"<>|]", "_");
        
        // 限制文件名长度
        if (safeName.length() > 100) {
            String extension = getFileExtension(safeName);
            String nameWithoutExt = safeName.substring(0, safeName.lastIndexOf('.'));
            safeName = nameWithoutExt.substring(0, 100 - extension.length()) + extension;
        }
        
        return safeName;
    }
} 